package br.com.persistence;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import br.com.model.Resposta;
import br.com.model.Pergunta;

public class PerguntaDao {


	public boolean insert(Pergunta pergunta) {

		if (!selectOne(pergunta)) {
			try {
				Connection conexao = getConexao();
				// antes de cadastrar a pergunta confere se a resposta esta
				// cadastrada
				RespostaDao respDao = new RespostaDao();
				if (!respDao.selectOne(pergunta.getResposta())) {
					// se a resposta nao estiver cadastrada entao cadastra a
					// resposta
					respDao.insert(pergunta.getResposta());
					// retorna a resposta cadastrada
					respDao.selectOne(pergunta.getResposta());
				}

				String sql = "INSERT INTO pergunta(pergunta, idResposta) VALUES (?,?)";
				PreparedStatement stmt = conexao.prepareStatement(sql);
				stmt.setString(1, pergunta.getPergunta());
				stmt.setInt(2, pergunta.getResposta().getIdResposta());
				stmt.execute();

				return true;
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				System.out.println(e.getMessage());
				return false;
			}
		}
		return false;
	}

	private Connection getConexao() {
		// TODO Auto-generated method stub
		return null;
	}

	
	public boolean update(Pergunta pergunta) {
		// TODO Auto-generated method stub
		return false;
	}

	// retorna uma lista COM 5 PERGUNTAS em ordem aleatoria
	// as perguntas vem com suas respectivas respostas
	
	public List<Pergunta> selectList() {
		List<Pergunta> lista = new ArrayList<Pergunta>();

		try  {
			Connection conexao = getConexao();
			String sql = "SELECT idPergunta, pergunta, resposta.idResposta,resposta "
					+ "FROM pergunta,resposta "
					+ "WHERE pergunta.idResposta = resposta.idResposta "
					+ "ORDER BY RAND() "
					+ "LIMIT 5";
			PreparedStatement stmt = conexao.prepareStatement(sql);
			ResultSet res = stmt.executeQuery();
			Pergunta pergunta;
			Resposta resposta;

			while (res.next()) {

				resposta = new Resposta();
				resposta.setIdResposta(res.getInt("idResposta"));
				resposta.setResposta(res.getString("resposta"));

				pergunta = new Pergunta();
				pergunta.setIdPergunta(res.getInt("idPergunta"));
				pergunta.setPergunta(res.getString("pergunta"));
				pergunta.setResposta(resposta);

				lista.add(pergunta);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println(e.getMessage());
		}

		return lista;
	}

	public boolean selectOne(Pergunta pergunta) {

		try {
			Connection conexao = getConexao();
			String sql = "SELECT idPergunta, pergunta, resposta.idResposta,resposta "
					+ "FROM pergunta,resposta "
					+ "WHERE (idPergunta=? OR pergunta=?) AND pergunta.idResposta = resposta.idResposta";
			PreparedStatement stmt = conexao.prepareStatement(sql);
			stmt.setInt(1, pergunta.getIdPergunta());
			stmt.setString(2, pergunta.getPergunta());
			ResultSet res = stmt.executeQuery();

			boolean encontrou = false;
			while (res.next()) {

				Resposta resposta = new Resposta();
				resposta.setIdResposta(res.getInt("idResposta"));
				resposta.setResposta(res.getString("resposta"));

				pergunta = new Pergunta();
				pergunta.setIdPergunta(res.getInt("idPergunta"));
				pergunta.setPergunta(res.getString("pergunta"));
				pergunta.setResposta(resposta);

				encontrou = true;
			}
			return encontrou;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			System.out.println(e.getMessage());
			return false;
		}
	}

	
	public boolean delete(Pergunta pergunta) {
		// TODO Auto-generated method stub
		return false;
	}

	
	public String createTable() {
		// TODO Auto-generated method stub
		return null;
	}

}
